#include "ModuleCLUTConnexGraph.h"

void ModuleCLUTConnexGraph::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);

	sb_dim=new QSpinBox(win);
	sb_dim->setPrefix("dim=");
	sb_dim->setToolTip("Nombre de valeurs que peut prendre la CLUT");
	sb_dim->setRange(0,65536);

	sb_threshold=new QSpinBox(win);
	sb_threshold->setPrefix("seuil=");
	sb_threshold->setToolTip("Nombre de liaisons minimums entre deux couleurs");
	sb_threshold->setRange(0,65536);

	cb_surfWeighted=new QCheckBox("Ponderer par les surfaces",win);
	cb_surfWeighted->setChecked(false);

	layout->addWidget(sb_threshold);
	layout->addWidget(sb_dim);
	layout->addWidget(cb_surfWeighted);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleCLUTConnexGraph::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleCLUTConnexGraph::process()
{
	if(cb_surfWeighted->isChecked())
	{
		getConnexGraphSurfaceWeighted(clut,sb_dim->value(),sb_threshold->value(),graph);
	}
	else
	{
		getConnexGraph(clut,sb_dim->value(),sb_threshold->value(),graph);
	}
	return graph;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleCLUTConnexGraph::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		clut=m.clone();
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleCLUTConnexGraph::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleCLUTConnexGraph::getName()
{
	return trUtf8("CLUT - Graph des connexités");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleCLUTConnexGraph::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleCLUTConnexGraph::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==2)
	{
		sb_threshold->setValue(list_params[0].toInt());
		sb_dim->setValue(list_params[1].toInt());
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleCLUTConnexGraph::getParams()
{
	return QString::number(sb_threshold->value())+tr(";")+
				 QString::number(sb_dim->value());
}

QCVModuleInterface * ModuleCLUTConnexGraph::clone()
{
	return new ModuleCLUTConnexGraph;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleCLUTConnexGraph::help(int id)
{
	if(id==-2)
	{
		return trUtf8("Calcule le graph des connexités associé à une CLUT");
	}
	else if(id==-1)
	{
		return tr("graph");
	}
	else if(id==0)
	{
		return tr("clut");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleCLUTConnexGraph_plugin,ModuleCLUTConnexGraph);  
